import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;


public class ner {

    // 实例化实体分词器
    public static Segment segment = HanLP.newSegment().enableNameRecognize(true).enablePlaceRecognize(true).enableOrganizationRecognize(true);

    public static void main(String[] args) throws IOException {
        String text = "1927年4月、7月，国民党内蒋介石集团和汪精卫集团相继叛变革命后，广东省国民党当局亦在广州等地大肆屠杀共产党人和革命人民，实行白色恐怖。9月中旬，国民党武汉政府所属张发奎第二方面军第4军，乘国民党南京政府所属第8路军在广东省东江地区进攻南昌起义军之际，从南昌进至广州，同桂系军阀李济深争夺广东地盘。张发奎初到广州时，为稳定其统治，曾一度以国民党“左”派面目出现，采取一些欺骗政策，企图获得广州工人阶级和市民的支持。中共广东省委识破和揭露了张发奎的欺骗政策，并利用张、李之间的矛盾，积极恢复和发展共产党的组织，发展工会、农会并进行各种斗争，全省工农运动日趋活跃。在广州市，有组织的工人纷纷驱逐国民党派到工会的改组委员，选举自己的工会委员，并为争取真正的民主权利和改善工人生活条件进行斗争。10月14日，海员举行的罢工，得到各业工人的援助，2万多工人举着镰刀斧头红旗，向反动政府示威，显示了广州工人阶级的觉悟和力量。广东省其他地区的农民运动，也有所恢复与发展。为配合南昌起义军的行动，广东东江等地区农民，在9月发动了秋收抗租暴动。7～17日，中共海陆丰县委领导海丰、陆丰两县农民赤卫军和农民群众举行起义，一度占领该两县城。10月30日，工农革命军第2师（由南昌起义军第24师余部编成）和海丰、陆丰农民赤卫军及农民群众，再次举行起义，占领了两县全境，并建立了两县的苏维埃政府。属于粤系的军阀张发奎，在广州站稳脚跟后，于11月17日用武力驱逐了桂系军阀李济深驻广州的机关、部队，接着向西江、北江扩展，夺取了广东政权。李济深为了夺回在广东失去的地盘，迅速调动兵力，进行反扑。李济深所属之黄绍竑部集结在广西省（今广西壮族自治区）梧州地区，准备从西面进攻广州；陈铭枢部则由东江地区向广州推进。张发奎亦急忙将其第4军主力调往广州以西之肇庆地区，一部调往广州以东之石龙地区。李福林第5军则分别驻守在韶关、江门等地。此时，粤桂军阀之间的战争，一触即发。这样，张发奎在广州市内的部队，仅有第4军军部、教导团、警卫团、新编成的第2师第3团、担负训练任务的炮兵团和一些警察武装。另外，第5军军部和少数部队驻守在珠江南岸。这些部队中战斗力最强的教导团和警卫团一部，则为共产党所掌握。仅就广州市区的力量对比来看，确实是举行武装起义的有利时机。但是，粤桂军阀之间的战争，尚未大规模爆发，张发奎的部队仍驻守在广州外围，这无疑将对起义构成严重的威胁。 [6]";
        List<String> name_li = new LinkedList<>();
        List<String> place_li = new LinkedList<>();
        List<String> organization_li = new LinkedList<>();
        List<Term> termList = segment.seg(text);
        for(Term term: termList) {
            String nature = term.nature != null ? term.nature.toString() : "空";
            if(nature.equals("nr")) {
                name_li.add(term.word);
            }
            else if(nature.equals("ns")) {
                place_li.add(term.word);
            }
            else if(nature.equals("nt")) {
                organization_li.add(term.word);
            }
        }
        System.out.println(name_li);
        System.out.println(place_li);
        System.out.println(organization_li);
    }
}
